iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0

沒想到 Day04 是單純的 JS 題目,主要聚焦在 JavaScript 陣列方法的使用,但我最後還是有寫在 CodeSandBox 裡面惹,就開始ㄅ

Q1

  • 篩選出 1500 年代(1500-1599)出生的人

    • filter 會建立新的陣列,包含所有通過檢查的項目
inventors.filter(
        (inventor) => inventor.year >= 1500 && inventor.year < 1600
      )

Q2

  • 建立新的陣列,包含每個人的全名

    • map 會回傳全新的陣列
inventors.map((inventor) => `${inventor.first} ${inventor.last}`)

Q3

  • 按出生日期排序

    • 要注意的是 sort 會改變原始資料,所以這邊複製後再處理

    • 如果比較結果為負,a 排在 b 前面;如果為正,b 排在 a 前面

[...inventors].sort((a, b) => a.year - b.year)

Q4

  • 計算全員的壽命總和

    • reduce 會對陣列裡的項目執行 reducer ,最後把結果總和起來做回傳
inventors.reduce(
        (total, inventor) => total + (inventor.passed - inventor.year),
        0
      ),

Q5

  • 以壽命排序

    • sort

    • b-a 所以是降冪排序

[...inventors].sort(
        (a, b) => b.passed - b.year - (a.passed - a.year)
      ),

Q7

  • 依照姓氏字母順序排序

    • 先從字串裡面用 split(", ") 來切割抓出姓氏

    • 比較後回傳 1 或 -1

[...people].sort((lastOne, nextOne) => {
        const [aLast] = lastOne.split(", ");
        const [bLast] = nextOne.split(", ");
        return aLast > bLast ? 1 : -1;
      }),

Q8

  • 統計出現次數

    • 也可以用 reduce 搭配 Map set

    • 使用 Map() 來儲存每種交通工具的計數

    • 最後把結果轉為普通物件

const transportationCount = data.reduce((map, item) => {
          map.set(item, (map.get(item) || 0) + 1);
          return map;
        }, new Map());

        return Object.fromEntries(transportationCount);

DEMO

https://codesandbox.io/p/devbox/w6wxv2

總結

  • map 會回傳新的陣列

  • sort 會改變原始資料

    • 回傳 1 、 -1

上一篇
[Day03]_CSS-Variables
下一篇
[Day05]_Flex-Panel-Gallery
系列文
React30——用 React 探索 JavaScript30 的魅力30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言